// src/service/puppeteer.ts
import { Provide, Init, Destroy, Scope, ScopeEnum } from '@midwayjs/core';
import puppeteer, { Browser } from 'puppeteer';

@Provide()
@Scope(ScopeEnum.Singleton) // 关键：声明单例作用域
export class PuppeteerTaskService {
  private browser: Browser;

  @Init()
  async init() {
    // 启动浏览器
    const browser = await puppeteer.launch(
      //配置的代理
      {
        headless: true, //无头模式
        //设置代理
        args: [
          '--proxy-server=http://tun-trnfmy.qg.net:18038',
          //设置为中文
          '--lang=zh-CN,zh',
          '--no-sandbox',
          '--disable-setuid-sandbox',
        ],
        protocolTimeout: 60000, // 设置协议超时时间
        env: {
          //设置为中文
          LANG: 'zh_CN.UTF-8',
        },
      }
    );
    this.browser = browser;
    browser.on('disconnected', () => {
      console.error('浏览器意外断开！');
    });
  }

  async createPage() {
    return await this.browser.createBrowserContext();
  }

  @Destroy()
  async destroy() {
    if (this.browser) {
      await this.browser.close();
      console.log('Puppeteer 实例已关闭');
    }
  }
}
